package cn.tedu.fx;

import java.util.ArrayList;
import java.util.List;

/**
 * 演示泛型限定
 */
public class 泛型上限下限限定 {
    public static void main(String[] args) {
        List<Integer> integers = new ArrayList<>();
        List<Double> doubles =new ArrayList<>();
        List<Number> numbers = new ArrayList<>();
        List<Object> objects = new ArrayList<>();
        sumOfList(integers);
        sumOfList(doubles);
        sumOfList(numbers);
        //sumOfList(objects);
        // 测试Integer的下限限定，最少是Integer，最大是Object
        // addNumbers(doubles);
        addNumbers(integers);
        addNumbers(numbers);
        addNumbers(objects);
    }

    // 使用上限限定通配符 ? extends Number  只要是number的子类都可以传，最多是Number
    public static double sumOfList(List<? extends Number> list) {
        double sum = 0.0;
        for (Number number : list) {
            sum += number.doubleValue();
        }
        return sum;
    }

    // 使用下限限定通配符 ? super Integer 只能是这样泛型参数只能是某个类或者其超类
    public static void addNumbers(List<? super Integer> list) {
        list.add(1);
        list.add(2);
        list.add(3);
    }




}
